package abd.pr1.Controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;

import abd.pr1.Interface.AdminEditarEpisodioWindow;
import abd.pr1.Interface.AdminNuevoEpisodioWindow;
import abd.pr1.Interface.EditarSerieWindow;
import abd.pr1.Interface.EpisodioWindow;
import abd.pr1.Interface.NuevaSerieWindow;
import abd.pr1.Mappers.ClaveSeguidor;
import abd.pr1.Mappers.EpisodiosMapper;
import abd.pr1.Mappers.GenerosMapper;
import abd.pr1.Mappers.SeguidoresMapper;
import abd.pr1.Mappers.SeriesGenerosMapper;
import abd.pr1.Mappers.SeriesMapper;
import abd.pr1.Models.Episodio;
import abd.pr1.Models.Genero;
import abd.pr1.Models.Serie;
import abd.pr1.Models.SerieGenero;

public class EditarSerieWindowController  implements ActionListener{

	private EditarSerieWindow EditarSerieWindow;
	private DataSource ds;
	private Serie serie;
	
	public EditarSerieWindowController(EditarSerieWindow nuevaSerieWindow,DataSource ds,Serie serie){
		this.EditarSerieWindow=nuevaSerieWindow;
		this.ds=ds;
		this.serie=serie;
		this.EditarSerieWindow.addListener(this);
		this.refreshSerie();
	}

	public void refreshSerie(){
		EditarSerieWindow.setNombreTexto(serie.getNombre());
		EditarSerieWindow.setTitularTexto(serie.getTitular());
		EditarSerieWindow.setSinopsisTexto(serie.getSinopsis());
		EditarSerieWindow.setEstreno(serie.getEstreno());
		EditarSerieWindow.setFinalizacion(serie.getFinalizacion());
		
		List<SerieGenero> lsg = new SeriesGenerosMapper(ds).queryByExample(new SerieGenero(serie.getId(), null));
		List<Genero> generos = new ArrayList<Genero>();
		
		for (SerieGenero serieGenero : lsg) {
			generos.add(new GenerosMapper(ds).findById(serieGenero.getIdGenero()));
		}
		
		List<Episodio> episodios= new EpisodiosMapper(ds).queryByExample(new Episodio(null, null, null, null, null, null, serie.getId()));
		Collections.sort(episodios);
		EditarSerieWindow.setEpisodioTable(episodios);
		
		EditarSerieWindow.setGeneroList(new GenerosMapper(ds).all());
		EditarSerieWindow.setSelectedGeneroList(generos);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getActionCommand().equals("guardar_serie")){
			this.serie.setNombre(this.EditarSerieWindow.getNombreTexto());
			this.serie.setTitular(this.EditarSerieWindow.getTitularTexto());
			this.serie.setSinopsis(this.EditarSerieWindow.getSinopsisTexto());
			
			int estreno=0;
			int finalizacion=0;
			
			if(this.EditarSerieWindow.getEstreno()>=1000){
				estreno = this.EditarSerieWindow.getEstreno();
			}
			if(this.EditarSerieWindow.getFinalizacion()>=1000){
				finalizacion = this.EditarSerieWindow.getFinalizacion();
			}
			
			this.serie.setEstreno(estreno);
			this.serie.setFinalizacion(finalizacion);
			
			List<Genero> generos=this.EditarSerieWindow.getGeneroList();
			
			new SeriesMapper(ds).update(this.serie);
			
			List<SerieGenero> lsg=new SeriesGenerosMapper(ds).queryByExample(new SerieGenero(serie.getId(), null));
				
			for (SerieGenero serieGenero : lsg) {
				new SeriesGenerosMapper(ds).delete(serieGenero);
			}
			
			for (Genero genero : generos) {
				new SeriesGenerosMapper(ds).insert(new SerieGenero(serie.getId(), genero.getId() ));
			}
			EditarSerieWindow.dispose();
			
		} else if(e.getActionCommand().equals("cerrar_serie")){
			EditarSerieWindow.dispose();
		} else if(e.getActionCommand().equals("informacion_episodios")){
			Episodio episodioSelected=EditarSerieWindow.getEpisodioSelected();
			if(episodioSelected!=null){
				new AdminEditarEpisodioWindowController(this,new AdminEditarEpisodioWindow(), ds, episodioSelected);
			}
		} else if(e.getActionCommand().equals("aniadir_episodios")){
			new AdminNuevoEpisodioWindowController(this,new AdminNuevoEpisodioWindow(), serie, ds);
		}
		
	}
}
